package com.csthink.breaker.annotations;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 实现基于 Guava 的限流注解
 *
 * @author <a href="mailto:security.2009@live.cn">Mars</a>
 * @since 2023-09-08
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GuavaLimit {

    /**
     * 资源的key,唯一
     * 作用: 不同的接口，不同的流量控制
     *
     * @return
     */
    String key() default "";

    /**
     * 最多的访问限制次数
     *
     * @return
     */
    double permitsPerSecond();

    /**
     * 获取令牌最大等待时间
     *
     * @return
     */
    long timeout();

    /**
     * 获取令牌最大等待时间，单位(分钟/秒/毫秒) 默认:毫秒
     *
     * @return
     */
    TimeUnit timeunit() default TimeUnit.MICROSECONDS;

    /**
     * 令牌获取失败的提示语
     *
     * @return
     */
    String msg() default "系统繁忙，请稍后再试";
}
